package com.itstyle.quartz.entity;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MenuTreeBuilder {
    // 构建菜单树
    public static List<Menu> buildTree(List<Menu> menuList) {
        // 首先将菜单列表转换为映射，键为 menuId，值为对应的 Menu
        Map<String, Menu> menuMap = new HashMap<String, Menu>();
        for (Menu menu : menuList) {
            menuMap.put(menu.getMenuId(), menu);
        }

        // 用于存储根节点
        List<Menu> rootNodes = new ArrayList<Menu>();

        // 遍历所有菜单节点，构建树结构
        for (Menu menu : menuList) {
            String parentId = menu.getParentId();

            // 如果 parentId 为 null 或者在 map 中找不到对应的父节点，则认为是根节点
            if (parentId == null || !menuMap.containsKey(parentId)) {
                rootNodes.add(menu);
            } else {
                // 否则，将当前节点添加到其父节点的子节点列表中
                Menu parentNode = menuMap.get(parentId);
                parentNode.getChildren().add(menu);
            }
        }

        return rootNodes;
    }
}
